package com.example.classweatherforecast

import java.text.SimpleDateFormat
import java.util.*

/**
 * 星期计算器类，用于计算当前星期后的具体星期几
 */
class WeekCalculator {
    // 星期数组，用于映射Calendar.DAY_OF_WEEK的值
    private val weekdays = arrayOf("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
    
    /**
     * 根据当前日期计算几天后的星期几
     * @param daysLater 几天后
     * @return 几天后的星期几
     */
    fun getWeekdayAfterDays(daysLater: Int): String {
        try {
            // 获取当前日期
            val calendar = Calendar.getInstance()
            // 添加天数
            calendar.add(Calendar.DAY_OF_MONTH, daysLater)
            // 获取星期几
            val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
            // 返回对应的星期字符串
            return weekdays[dayOfWeek - 1]
        } catch (e: Exception) {
            // 如果计算失败，返回默认格式
            return "后${daysLater}天"
        }
    }
    
    /**
     * 根据当前星期计算几天后的星期几
     * @param currentWeek 当前的星期几（如："星期一"）
     * @param daysLater 几天后
     * @return 几天后的星期几
     */
    fun getWeekdayAfterDays(currentWeek: String, daysLater: Int): String {
        // 获取当前星期在数组中的索引
        val currentIndex = weekdays.indexOf(currentWeek)
        if (currentIndex == -1) {
            // 如果找不到对应的星期，返回默认格式
            return "后${daysLater}天"
        }
        
        // 计算几天后的索引，对7取模以确保在数组范围内
        val futureIndex = (currentIndex + daysLater) % 7
        return weekdays[futureIndex]
    }
    
    /**
     * 根据日期字符串获取星期几
     * @param dateString 日期字符串，格式如："2025年11月03日"
     * @return 对应的星期几
     */
    fun getWeekdayFromDate(dateString: String): String {
        return try {
            // 解析日期格式
            val dateFormat = SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA)
            val date = dateFormat.parse(dateString)
            
            // 获取Calendar实例并设置日期
            val calendar = Calendar.getInstance()
            calendar.time = date
            
            // 获取星期几（Calendar.SUNDAY = 1, Calendar.MONDAY = 2, ...）
            val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
            
            // 返回对应的星期字符串
            weekdays[dayOfWeek - 1]
        } catch (e: Exception) {
            // 如果解析失败，返回空字符串
            ""
        }
    }
}